﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using FluorineFx;
using System.Data;
using CasasJusticia.Messaging.Modelo;

namespace CasasJusticia.Messaging.Contexto.CasasJusticia
{
    [RemotingService("Nacion")]
    public class Nacion
    {
        #region Constructor

        public Nacion()
        {
        }

        #endregion

        #region Procedimientos y Funciones

        /// <summary>
        /// 
        /// </summary>
        /// <param name="idEntidad"></param>
        /// <param name="idCasasJusticia"></param>
        /// <returns></returns>
        public string ConsultarCasasJusticia(int idEntidad, Array idCasasJusticia)
        {
            try
            {
                Collection<EntidadPorCasa> entidadesPorCasasJusticia = Utilidades.EntidadesPorCasa();
                
                List<int> codigosCasasJusticia = Utilidades.ArmarListaValoresDeArray(idCasasJusticia);

                if (idEntidad < 0)
                {
                    var queryEntidadesPorCasasJusticia = (from entidadPorCasa in entidadesPorCasasJusticia
                                                          where codigosCasasJusticia.Contains(entidadPorCasa.IdCasaJusticia)
                                                          select entidadPorCasa.IdCasaJusticia).Distinct().ToList();

                    return Utilidades.ArmarCadenaValoresList(queryEntidadesPorCasasJusticia);
                }
                else
                {
                    var queryEntidadesPorCasasJusticia = (from entidadPorCasa in entidadesPorCasasJusticia
                                                          where codigosCasasJusticia.Contains(entidadPorCasa.IdCasaJusticia)
                                                          && entidadPorCasa.IdEntidad == idEntidad
                                                          select entidadPorCasa.IdCasaJusticia).Distinct().ToList();

                    return Utilidades.ArmarCadenaValoresList(queryEntidadesPorCasasJusticia);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="idMunicipio"></param>
        /// <param name="idCasasJusticia"></param>
        /// <returns></returns>
        [DataTableType("CasasJusticia.Modelo.EntidadPorCasaGeo")]
        public DataTable ConsultarEntidades(Array idCasasJusticia)
        {
            try
            {
                Collection<EntidadPorCasa> entidadesPorCasasJusticia = Utilidades.EntidadesPorCasa();
                
                List<int> codigosCasasJusticia = Utilidades.ArmarListaValoresDeArray(idCasasJusticia);

                var queryEntidadesPorCasasJusticia = from entidadPorCasa in entidadesPorCasasJusticia
                                                     where codigosCasasJusticia.Contains(entidadPorCasa.IdCasaJusticia)
                                                     group entidadPorCasa by new { IdEntidad = entidadPorCasa.IdEntidad, NomEntidad = entidadPorCasa.NomEntidad } into entidad
                                                     orderby entidad.Key.NomEntidad
                                                     select new EntidadPorCasa
                                                     {
                                                         EstEntidad = entidad.FirstOrDefault().EstEntidad,
                                                         EstEntidadCasa = entidad.FirstOrDefault().EstEntidadCasa,
                                                         IdCasaJusticia = entidad.FirstOrDefault().IdCasaJusticia,
                                                         IdDepartamento = entidad.FirstOrDefault().IdDepartamento,
                                                         IdEntidad = entidad.Key.IdEntidad,
                                                         IdEntidadCasa = entidad.FirstOrDefault().IdEntidadCasa,
                                                         IdLocalidad = entidad.FirstOrDefault().IdLocalidad,
                                                         IdMunicipio = entidad.FirstOrDefault().IdMunicipio,
                                                         NomCasaJusticia = entidad.FirstOrDefault().NomCasaJusticia,
                                                         NomDepartamento = entidad.FirstOrDefault().NomDepartamento,
                                                         NomEntidad = entidad.Key.NomEntidad,
                                                         NomLocalidad = entidad.FirstOrDefault().NomLocalidad,
                                                         NomMunicipio = entidad.FirstOrDefault().NomMunicipio,
                                                         TieneLocalidades = entidad.FirstOrDefault().TieneLocalidades,
                                                         TipoCasaJusticia = entidad.FirstOrDefault().TipoCasaJusticia
                                                     };

                return Utilidades.ConsultaToDataTable<EntidadPorCasa>(queryEntidadesPorCasasJusticia.ToArray());

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

        #endregion
    }
}
